A computing device usually has multiple processes running on it, some of the processes being in kernel space and some in user space. Sometimes two user processes need to pass data between each other. However, the two user processes do not have access to one another's address space. One way to pass data between two user processes is for a kernel process to copy data of a first user process into the kernel process address space. The kernel process can then make a second copy of the kernel address space copy into the second user process. However, such data transfer from one user process to a second user process requires the creation of two additional copies of the data. Such “two-copy” data transfer uses a lot of resources of a computing device, and takes a significant amount of time to complete.